home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 001 / glasstty.pqs / glasstty.pas
Pascal/Delphi Source File  |  1985-03-08  |  2KB  |  71 lines

  1. program GLASSTTY (input, output);
  2. {Simple dumb terminal for IBM PC}
  3. {Programmed by Richard Gillmann (GILLMANN@ISIB), 1983}
  4.  
  5. {***INTERFACE TO THE COM_PKG1 ASYNCHRONOUS COMMUNICATIONS PACKAGE***}
  6. {initialize port and interrupt vector}
  7.     procedure init_au(divisor:word); EXTERN;
  8. {turn off interrupts from the aux port}
  9.     procedure close_a;               EXTERN;
  10. {turn off dtr}
  11.     procedure dtr_off;               EXTERN;
  12. {turn on dtr}
  13.     procedure dtr_on;                EXTERN;
  14. {return number of characters in input buffer}
  15.     function crcnt : word;           EXTERN;
  16. {read next character in input buffer}
  17.     function cread : byte;           EXTERN;
  18. {return number of free bytes in output buffer}
  19.     function cwcnt : word;           EXTERN;
  20. {write a character to output buffer}
  21.     procedure cwrit(ch:byte);        EXTERN;
  22. {write a character to the input queue}
  23.     procedure wlocal(ch:byte);       EXTERN;
  24. {cause a break to be sent}
  25.     procedure make_br;               EXTERN;
  26.  
  27. {***INTERFACE TO DOS***}
  28. function DOSXQQ(command, parameter: word): byte; EXTERN;
  29.  
  30. var
  31.    rate    : word;
  32.    divisor : word;
  33.    ok      : boolean;
  34.    ch      : byte;
  35.  
  36. begin
  37.  
  38. {Obtain baud rate from user}
  39. repeat
  40.    ok := true;
  41.    write('Baud rate = ');
  42.    readln(rate);
  43.    case rate of
  44.        300 : divisor := 384;
  45.       1200 : divisor :=  96;
  46.       2400 : divisor :=  48;
  47.       4800 : divisor :=  24;
  48.       9600 : divisor :=  12;
  49.       otherwise begin
  50.          writeln('Incorrect rate.  Try again.');
  51.          ok := false;
  52.       end {otherwise};
  53.    end {case};
  54. until ok;
  55.  
  56. writeln('Entering terminal mode...');
  57. init_au(divisor);
  58.  
  59. {terminal mode loop}
  60. while true do begin            {infinite loop - exit with ctl/brk}
  61.    if DOSXQQ(11,0) <> 0 then        {character typed?}
  62.       cwrit(DOSXQQ(8,0) and 127);    {if so, strip parity & send}
  63.    if crcnt <> 0 then begin        {character received?}
  64.       ch := cread and 127;        {read port, strip parity}
  65.       if ch <> 0 then            {ignore NULs}
  66.          ch := DOSXQQ(2, WRD(ch));    {if ok, display char}
  67.    end {if};
  68. end {while};
  69.  
  70. end.
  71.